package course.examples.ContentProviders.ContactsListInsertContacts;
import java.util.ArrayList;
import java.util.List;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ListActivity;
import android.app.LoaderManager;
import android.content.ContentProviderOperation;
import android.content.CursorLoader;
import android.content.Loader;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.util.Log;
import android.widget.SimpleCursorAdapter;
import course.examples.ContentProviders.ContactsListWithInsDel.R;
public class DisplayActivity extends ListActivity implements
LoaderManager.LoaderCallbacks<Cursor> {
public final static String[] mNames = new String[] { "Android Painter",
"Steve Ballmer", "Steve Jobs", "Larry Page" };
private static final String columnsToExtract[] = new String[] {
Contacts._ID, Contacts.DISPLAY_NAME, Contacts.STARRED };
private static final String columnsToDisplay[] = new String[] { Contacts.DISPLAY_NAME };
private static final int[] resourceIds = new int[] { R.id.name };
private static final String TAG = "ContactsListDisplayActivity";
private Account[] mAccountList;
private String mType;
private String mName;
private SimpleCursorAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get Account information
// Must have a Google account set up on your device
mAccountList = AccountManager.get(this).getAccountsByType("com.google");
mType = mAccountList[0].type;
mName = mAccountList[0].name;
// Insert new contacts
insertAllNewContacts();
// Create and set empty list adapter
mAdapter = new SimpleCursorAdapter(this, R.layout.list_layout, null,
columnsToDisplay, resourceIds, 0);
setListAdapter(mAdapter);
// Initialize a CursorLoader
getLoaderManager().initLoader(0, null, this);
}
// Insert all new contacts into Contacts ContentProvider
private void insertAllNewContacts() {
// Set up a batch operation on Contacts ContentProvider
ArrayList<ContentProviderOperation> batchOperation = new ArrayList<ContentProviderOperation>();
for (String name : mNames) {
addRecordToBatchInsertOperation(name, batchOperation);
}
try {
// Apply all batched operations
getContentResolver().applyBatch(ContactsContract.AUTHORITY,
batchOperation);
} catch (RemoteException e) {
Log.i(TAG, "RemoteException");
} catch (OperationApplicationException e) {
Log.i(TAG, "RemoteException");
}
}
// Insert named contact into Contacts ContentProvider
private void addRecordToBatchInsertOperation(String name,
List<ContentProviderOperation> ops) {
int position = ops.size();
// First part of operation
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, mType)
.withValue(RawContacts.ACCOUNT_NAME, mName)
.withValue(Contacts.STARRED, 1).build());
// Second part of operation
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, position)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, name).build());
}
// Remove all newly-added contacts when activity is destroyed
@Override
protected void onDestroy() {
deleteAllNewContacts();
super.onDestroy();
}
private void deleteAllNewContacts() {
for (String name : mNames) {
deleteContact(name);
}
}
private void deleteContact(String name) {
getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI,
ContactsContract.Contacts.DISPLAY_NAME + "=?",
new String[] { name });
}
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ Contacts.DISPLAY_NAME + " != '' ) AND (" + Contacts.STARRED
+ "== 1))";
return new CursorLoader(this, Contacts.CONTENT_URI, columnsToExtract,
select, null, Contacts._ID + " ASC");
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}